const path = require('path')
const webpack = require('webpack')
const GitRevisionPlugin = require('git-revision-webpack-plugin')
const GitRevision = new GitRevisionPlugin()
const buildDate = JSON.stringify(new Date().toLocaleString())

function resolve (dir) {
    return path.join(__dirname, dir)
}

// check Git
function getGitHash () {
    try {
        return GitRevision.version()
    } catch (e) {
    }
    return 'unknown'
}

// const isProd = process.env.NODE_ENV === 'production'

// vue.config.js
const vueConfig = {
    publicPath: process.env.VUE_APP_BASE_URL, // 前端资源访问根目录， 可配置到cdn目录下。 建议使用命令行环境变量进行替换。
    configureWebpack: {
        // webpack plugins
        plugins: [
            // Ignore all locale files of moment.js
            new webpack.IgnorePlugin({

                    resourceRegExp: /^\.\/locale$/,
                     contextRegExp: /moment$/
                }
            ),
            new webpack.DefinePlugin({
                APP_VERSION: `"${require('./package.json').version}"`,
                GIT_HASH: JSON.stringify(getGitHash()),
                BUILD_DATE: buildDate
            })
        ],
        // 代码调试
        devtool: 'source-map',
        // if prod, add externals
        externals: {}
    },

    chainWebpack: (config) => {
        config.module
            .rule('vue')
            .use('style-resources')
            .loader('style-resources-loader')
            .options({
                patterns: [
                    // 指定资源文件的路径
                    path.resolve(__dirname, 'src/assets/styles/color.less')
                ]
            })

        const oneOfsMap = config.module.rule('less').oneOfs.store
        oneOfsMap.forEach(item => {
            item
                .use('style-resources-loader')
                .loader('style-resources-loader')
                .options({
                    // or an array : ["./path/to/vars.less", "./path/to/mixins.less"] 这里的路径不能使用@，否则会报错
                    patterns: './src/assets/styles/color.less'
                })
                .end()
        })
        config.resolve.alias
            .set('@$', resolve('src'))

        const svgRule = config.module.rule('svg')
        svgRule.test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
        svgRule.uses.clear()
        // svgRule
        //     .oneOf('inline')
        //     .resourceQuery(/inline/)
        //     .use('vue-svg-icon-loader')
        //     .loader('vue-svg-icon-loader')
        //     .end()
        //     .end()
        //     .oneOf('external')
        //     .use('file-loader')
        //     .loader('file-loader')
        //     .options({
        //         limit: 100000,
        //         name: 'assets/[name].[hash:8].[ext]'
        //     })
        svgRule
        .test(/\.svg$/)
        .use('svg-sprite-loader')
        .loader('svg-sprite-loader')
        .options({
            symbolId: 'icon-[name]'
        })
        .end()
          // 添加 svg loader
        config.module
        .rule('svg')
        .exclude.add(/\.svg$/)
        .end()
        config.module
        .rule('icons')
        .test(/\.svg$/)
        .use('url-loader')
        .loader('url-loader')
        .options({
          limit: 10000,
          name: 'assets/[name].[hash:8].[ext]'
        })
        .end()
    },

    css: {
        loaderOptions: {
            less: {

                lessOptions: {
                    modifyVars: {
                        'primary-color': '#1DA57A',
                        'link-color': '#1DA57A',
                        'border-radius-base': '4px'
                    },
                    javascriptEnabled: true

                }
            }
        }
    },

    devServer: {
        // development server port 8000
        port: 8000
        // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
        // proxy: {
        //   '/api': {
        //     target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro',
        //     ws: false,
        //     changeOrigin: true
        //   }
        // }
    },

    // disable source map in production
    productionSourceMap: false,
    lintOnSave: undefined,
    // babel-loader no-ignore node_modules/*
    transpileDependencies: [],

    pluginOptions: { // 第三方插件配置
        'style-resources-loader': {
            preProcessor: 'less',
            patterns: [path.resolve(__dirname, 'src/assets/styles/color.less')] // less所在文件路径
        }
    }
}

module.exports = vueConfig
